#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>

#ifndef _ALGORITMOS_H
#define _ALGORITMOS_H

#define TAM_LINHA 1000 // tamanho de uma linha
#define TAM_BLOCO 4 // numero de linha a serem lidas de cada vez
#define MAX_CHAR   256   // Inteiro Maximo que representa um Caractere
#define NUM_ERROS  10 
#define MAX_PADROES 100
#define TAM_MAX_PADRAO 200

#define FALSE 0
#define TRUE 1

#define         N_ALGORITMOS        5

#define         BMH        0
#define         BMHS       1
#define         SA         2
#define         SAA        3
#define         PD         4


#define ANALISE 1

// ALGORITMOS DE BUSCA:
// algoritmos que fazem a busca em um linha
// Boyer Moore Horspool
long bmhLinha(char *linha, char *padrao, int numLinha, int erro, int* ocorrencias);
// Boyer Moore Horspool Sunday
long bmhsLinha(char *linha, char *padrao, int numLinha, int erro, int* ocorrencias);
// ShiftAnd
long saLinha(char *linha, char *padrao, int numLinha, int erro, int* ocorrencias);
// ShiftAnd Aprox.
long saaLinha(char *linha, char *padrao, int numLinha, int erro, int* ocorrencias);
// Programacao Dinamica
long pdLinha(char *linha, char *padrao, int numLinha, int erro, int* ocorrencias);


// ALGORITMOS DE BUSCA AUXILIARES: 
// algoritmos auxiliares que fazem a busca em um conjutno de linhas
long bmhTexto(char **texto, char *padrao, int nLinhasTexto, int linhaInicial, int erro, float *tempo, int* ocorrencias);
long bmhsTexto(char **texto, char *padrao, int nLinhasTexto, int linhaInicial, int erro, float *tempo, int* ocorrencias);
long saTexto(char **texto, char *padrao, int nLinhasTexto, int linhaInicial, int erro, float *tempo, int* ocorrencias);
long saaTexto(char **texto, char *padrao, int nLinhasTexto, int linhaInicial, int erro, float *tempo, int* ocorrencias);
long pdTexto(char **texto, char *padrao, int nLinhasTexto, int linhaInicial, int erro, float *tempo, int* ocorrencias);

// DEBUG
void imprimeResultado(char *linha, char *padrao, int numLinha, int posicao);


#endif 

